<?php

/**
 * Контроллер фронтенда. В соответствии с текущим пунктом структуры определяет
 * модуль, который должен обработать запрос, и делегирует управление ему.
 *
 */
class Kernel_Filter_FrontController_Clear extends Kernel_Filter_FrontController_Abstract {

    /**
     * Метод обработки пользовательского запроса.
     *
     */
    public function process() {

        // для красивых URL’ов передаем в ответ приложения основной путь
        Application::getResponse()
            ->assign('SITE_ROOT', '')
            ->base($this->_base());

        // руками запускаем фильтр структуры
        parent::_forward(new Kernel_Filter_Structure);

        // здесь выполняется поиск и исполнение модуля, который соответствует
        // текущему урлу
        parent::process();
    }

    /**
     * Возвращает описание компонента, который обработает запрошенное действие,
     * полученное из запроса.
     *
     * @return  Kernel_Token
     */
    protected function _getFilterToken() {
        $query = 'SELECT
                         `module`
                    FROM
                         `system_resource`
                   WHERE
                         `id` = ' . (int)Kernel_Filter_Structure::getMenuId();

        return new Kernel_Token(database::fetchOne($query));
    }

    /**
     * Возвращает наименование класса компонента, который обработает запрошенное
     * действие.
     *
     * @param   string  $name
     * @return  string
     */
    protected function _getFilterClassName($name) {
        return str_camelize($name) . '_Module';
    }

    /**
     * Возвращает основной путь страницы.
     *
     * @return  string
     */
    private function _base() {
        return preg_replace('/^https?/',
            Application::getRequest()->secure() ? 'https' : 'http', BASE_PATH);
    }
}
